home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
C64
/
A-Monthly Disks
/
(c)abh.d64
/
event calendar
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2007-02-04
|
8KB
|
336 lines
100 REM EVENT CALENDAR V1.2 G. ROGER GATHERS
110 POKE 53280,0:POKE 53281,0:POKE 646,5
120 PRINT CHR$(147):FOR I=1 TO 10:PRINT:NEXT I
130 PRINT TAB(10)"EVENT CALENDAR"
140 PRINT TAB(10)"--------------"
150 FOR I=1 TO 1000:NEXT I
160 N=100:DIM DT$(N),EV$(N),DS(N)
170 GOSUB 15000:REM LOAD CALENDAR DATA
180 INPUT "TODAY'S DATE (MM/DD/YY):[146]";ID$
190 DX$=ID$:GOSUB 14000:TD=DO
200 D8$=ID$:PRINT:GOSUB 16000
210 FOR I=1 TO 3000:NEXT I
220 REM MENU #1
230 PRINT CHR$(147)
240 F2=0:F5=0
250 FOR I=1 TO 6:PRINT:NEXT I
260 POKE 646,7
270 PRINT TAB(12)"*** MENU #1 ***":PRINT
280 POKE 646,3
290 PRINT TAB(6)"1 - DISPLAY ALL EVENTS"
300 PRINT TAB(6)"2 - LIST EVENTS ON PRINTER"
310 PRINT TAB(6)"3 - DISPLAY FUTURE EVENTS"
320 PRINT TAB(6)"4 - ADD/CREATE NEW EVENTS"
330 PRINT TAB(6)"5 - DELETE EVENTS"
340 PRINT TAB(6)"6 - EXIT PROGRAM"
350 POKE 646,7
360 PRINT:PRINT TAB(12)"ENTER SELECTION[146]"
370 GET A$:IF A$="" THEN 370
380 IF VAL(A$)>6 THEN PRINT TAB(13)"1 - 6 ONLY":FOR I=1 TO 1500:NEXT I:GOTO 230
390 ON VAL(A$) GOTO 9000,13000,10000,11000,12000,400
400 END
2000 REM MENU #2 (SUBROUTINE)
2010 PRINT CHR$(147)
2020 FOR I=1 TO 6:PRINT:NEXT I
2030 POKE 646,7
2040 PRINT TAB(12)"*** MENU #2 ***":PRINT
2050 POKE 646,3
2060 PRINT TAB(16)"A[146]NNUAL"
2070 PRINT TAB(16)"O[146]NE TIME"
2080 POKE 646,7
2090 PRINT:PRINT TAB(12)"ENTER SELECTION[146]"
2100 GET A$:IF A$="" THEN 2100
2110 IF A$="A" THEN 2150
2120 IF A$="O" THEN 2160
2130 PRINT TAB(13)"A OR O ONLY":FOR I=1 TO 1500:NEXT I
2140 (null) TO 2010
2150 F2=1:(null) TO 2170
2160 F2=2
2170 RETURN
5000 REM MENU #4 (SUBROUTINE)
5010 PRINT CHR$(147):PRINT:PRINT
5020 POKE 646,3
5030 PRINT TAB(6)"A[146]DD TO EXISTING FILE"
5040 PRINT TAB(6)"N[146]EW FILE"
5050 PRINT TAB(6)"R[146]ETURN TO MENU #1"
5060 POKE 646,7
5070 PRINT:PRINT TAB(12)"ENTER SELECTION[146]"
5080 GET A$:IF A$="" THEN 5080
5090 IF A$="A" THEN 5130
5100 IF A$="N" THEN 5140
5110 IF A$="R" THEN 5150
5120 PRINT "A, N, OR R ONLY":FOR I=1 TO 1500:NEXT I:(null) TO 5010
5130 F5=1:(null) TO 5160
5140 F5=2:(null) TO 5160
5150 F5=3
5160 RETURN
6000 REM READ FILES (SUBROUTINE)
6010 PRINT CHR$(147):PRINT:PRINT
6020 POKE 646,5
6030 IF F2=2 THEN 6060
6040 FI$="ANNLEVENTS"
6050 PRINT "READING ANNUAL EVENTS":(null) TO 6080
6060 FI$="ONETEVENTS"
6070 PRINT "READING ONE TIME EVENTS"
6080 OPEN 15,8,15
6090 OPEN 2,8,2,FI$+",S,R"
6100 GOSUB 18000
6110 POKE 646,3
6120 INPUT#2, LA$:REM LAST ACCESS DATE
6130 FOR I=1 TO N
6140 INPUT#2,DT$(I)
6150 IF DT$(I)="END" THEN 6180
6160 INPUT#2,EV$(I):INPUT#2,DS(I)
6170 NEXT I
6180 CLOSE 2:ND=I-1
6190 CLOSE 15
6200 RETURN
7000 REM WRITE FILE (SUBROUTINE)
7010 PRINT CHR$(147):PRINT:PRINT
7020 POKE 646,5
7030 IF F2=2 THEN 7060
7040 FI$="ANNLEVENTS"
7050 PRINT "WRITING ANNUAL EVENTS":(null) TO 7080
7060 FI$="ONETEVENTS"
7070 PRINT "WRITING ONE TIME EVENTS"
7080 OPEN 15,8,15,"S0:"+FI$
7090 OPEN 3,8,3,"0:"+FI$+",S,W"
7100 GOSUB 18000
7110 POKE 646,3
7120 PRINT#3,ID$:REM TODAY'S DATE
7130 FOR I=1 TO ND
7140 PRINT#3,DT$(I):PRINT#3,EV$(I):PRINT#3,DS(I)
7150 NEXT I
7160 DT$(ND+1)="END":PRINT#3,DT$(ND+1)
7170 CLOSE 3
7180 CLOSE 15
7190 RETURN
8000 REM SORT EVENTS INTO CHRONOLOGICAL ORDER (SUBROUTINE)
8010 FOR I=1 TO ND-1
8020 FOR J=I+1 TO ND
8030 IF DS(J)>DS(I) THEN 8070
8040 TE=DS(I):DS(I)=DS(J):DS(J)=TE
8050 TE$=DT$(I):DT$(I)=DT$(J):DT$(J)=TE$
8060 TE$=EV$(I):EV$(I)=EV$(J):EV$(J)=TE$
8070 NEXT J
8080 NEXT I
8090 RETURN
9000 REM DISPLAY ALL EVENTS
9010 GOSUB 2000:REM SELECT ONE-TIME OR ANNUAL EVENTS
9020 GOSUB 6000:REM READ THE CORRESPONDING FILE
9030 PRINT CHR$(147):PRINT:PRINT
9040 POKE 646,7
9050 PRINT "LAST ACCESS:";LA$:PRINT
9060 IF F2=2 THEN 9080
9070 PRINT "*** ANNUAL EVENTS ***":PRINT:(null) TO 9090
9080 PRINT "*** ONE-TIME EVENTS ***":PRINT
9090 POKE 646,3
9100 NL=0
9110 FOR I=1 TO ND
9120 PRINT DT$(I),EV$(I)
9130 NL=NL+1:IF NL<12 THEN 9180:REM SCREEN NOT FULL
9140 PRINT:PRINT "PRESS C TO CONTINUE[146]":NL=0
9150 GET A$:IF A$="" THEN 9150
9160 IF A$<>"C" THEN 9150
9170 PRINT CHR$(147):PRINT:PRINT
9180 NEXT I
9190 PRINT "END OF FILE"
9200 PRINT:PRINT "PRESS M FOR MENU #1[146]"
9210 GET A$:IF A$="" THEN 9210
9220 IF A$<>"M" THEN 9210
9230 (null) TO 220
10000 REM DISPLAY FUTURE EVENTS
10010 GOSUB 2000:REM SELECT ONE-TIME OR ANNUAL EVENTS
10020 GOSUB 6000:REM READ THE CORRESPONDING FILE
10030 PRINT CHR$(147):PRINT:PRINT
10040 PRINT "LAST ACCESS:";LA$:PRINT
10050 PRINT "FINAL DATE TO SEARCH?"
10060 IF F2=1 THEN PRINT "USE FORMAT MM/DD"
10070 IF F2=2 THEN PRINT "USE FORMAT MM/DD/YY"
10080 INPUT DF$
10090 LE=LEN(DF$):IF LE<6 THEN 10120:REM ANNUAL
10100 IF F2=2 THEN 10150:REM ONE TIME, OK
10110 PRINT "WRONG FORMAT":(null) TO 10060
10120 IF F2=1 THEN 10150:REM ANNUAL, OK
10130 PRINT "WRONG FORMAT":(null) TO 10070
10140 REM CONVERT TO SORT VALUE
10150 DX$=DF$:GOSUB 14000:DF=DO:REM FINAL DATE VALUE
10160 IF F2=2 THEN TS=TD:(null) TO 10190
10170 LE=LEN(ID$):DX$=LEFT$(ID$,LE-3)
10180 GOSUB 14000:TS=DO
10190 FOR I=1 TO ND
10200 IF DT$(I)="END" THEN 10250
10210 IF DS(I)<TS THEN 10240
10220 IF DS(I)>DF THEN 10240
10230 PRINT DT$(I),EV$(I)
10240 NEXT I
10250 PRINT "END"
10260 PRINT:PRINT "PRESS M FOR MENU #1[146]"
10270 GET A$:IF A$="" THEN 10270
10280 IF A$<>"M" THEN 10270
10290 (null) TO 220
11000 REM ADD OR CREATE EVENTS
11010 GOSUB 2000:REM SELECT ONE-TIME OR ANNUAL EVENTS
11020 GOSUB 5000:REM ADD, NEW OR ABORT
11030 PRINT CHR$(147):PRINT:PRINT
11040 IF F5=2 THEN 11080
11050 IF F5=3 THEN 220
11060 GOSUB 6000:REM READ EXISTING FILE
11070 I=ND+1:(null) TO 11090
11080 I=1
11090 IF F2=1 THEN 11110
11100 PRINT "USE FORMAT MM/DD/YY":(null) TO 11120
11110 PRINT "USE FORMAT MM/DD"
11120 PRINT "USE END[146] TO TERMINATE DATA ENTRY"
11130 PRINT:INPUT "DATE";DT$(I)
11140 IF DT$(I)="END" THEN 11240
11150 IF F2=2 THEN D8$=DT$(I):PRINT:GOSUB 16000:FOR J=1 TO 1000:NEXT J
11160 LE=LEN(DT$(I)):IF LE<6 THEN 11190:REM ANNUAL FILE
11170 IF F2=2 THEN 11210:REM ONE-TIME, FORMAT OK
11180 PRINT "WRONG FORMAT":(null) TO 11110
11190 IF F2=1 THEN 11210:REM ANNUAL, FORMAT OK
11200 PRINT "WRONG FORMAT":(null) TO 11100
11210 PRINT:INPUT "EVENT";EV$(I)
11220 DX$=DT$(I):GOSUB 14000:DS(I)=DO:REM CALCULATE SORT VALUE
11230 I=I+1:(null) TO 11130
11240 ND=I-1
11250 GOSUB 8000:REM PUT FILE IN CHRON. ORDER
11260 GOSUB 7000:REM WRITE THE FILE
11270 (null) TO 220
12000 REM DELETE EVENTS
12010 GOSUB 2000:REM SELECT ONE-TIME OR ANNUAL EVENTS
12020 GOSUB 6000:REM READ THE CORRESPONDING FILE
12030 PRINT CHR$(147):PRINT:PRINT
12040 PRINT TAB(14)"*** MENU #3 ***":PRINT
12050 POKE 646,3
12060 PRINT TAB(5)"1 - DELETE ALL PAST EVENTS"
12070 PRINT TAB(5)"2 - DELETE EVENTS FROM LIST"
12080 PRINT TAB(5)"3 - DELETE EVENTS FOR A GIVEN DATE"
12090 PRINT TAB(5)"4 - RETURN TO MENU #1"
12100 POKE 646,7
12110 PRINT:PRINT TAB(12)"ENTER SELECTION[146]"
12120 GET A$:IF A$="" THEN 12120
12130 ON VAL(A$) GOTO 12140,12270,12430,220
12140 IF F2=1 THEN PRINT:PRINT "NOT USED FOR ANNUAL FILE":(null) TO 12160
12150 (null) TO 12170
12160 FOR I=1 TO 2500:NEXT:(null) TO 220
12170 I=1
12180 IF TD<=DS(I) THEN 12230
12190 FOR J=I+1 TO ND+1
12200 DT$(J-1)=DT$(J):EV$(J-1)=EV$(J):DS(J-1)=DS(J)
12210 NEXT J
12220 ND=ND-1:I=I-1
12230 I=I+1:IF I>ND THEN 12250
12240 (null) TO 12180
12250 GOSUB 7000:REM WRITE THE REVISED FILE
12260 (null) TO 220
12270 I=1
12280 PRINT:PRINT DT$(I);TAB(10);EV$(I)
12290 PRINT:PRINT TAB(8)"DELETE THIS EVENT?"
12300 GET A$:IF A$="" THEN 12300
12310 IF A$="Y" THEN 12350
12320 IF A$="N" THEN 12390
12330 POKE 646,5
12340 PRINT:PRINT "ANSWER Y OR N":POKE 646,3:GOTO 12300
12350 FOR J=I+1 TO ND+1
12360 DT$(J-1)=DT$(J):EV$(J-1)=EV$(J):DS(J-1)=DS(J)
12370 NEXT J
12380 ND=ND-1:I=I-1
12390 I=I+1:IF I>ND THEN 12410
12400 (null) TO 12280
12410 GOSUB 7000:REM WRITE THE REVISED FILE
12420 (null) TO 220
12430 PRINT:PRINT "ENTER THE DATE TO DELETE"
12440 IF F2=1 THEN 12460
12450 PRINT "USE FORMAT MM/DD/YY":(null) TO 12470
12460 PRINT "USE FORMAT MM/DD"
12470 INPUT DE$
12480 LE=LEN(DE$):IF LE<6 THEN 12510:REM ANNUAL
12490 IF F2=2 THEN 12530:REM ONE-TIME,OK
12500 PRINT "WRONG FORMAT":(null) TO 12460
12510 IF F2=1 THEN 12530:REM ANNUAL, OK
12520 PRINT "WRONG FORMAT":(null) TO 12450
12530 I=1
12540 IF DT$(I)<>DE$ THEN 12590
12550 FOR J=I+1 TO ND+1
12560 DT$(J-1)=DT$(J):EV$(J-1)=EV$(J):DS(J-1)=DS(J)
12570 NEXT J
12580 ND=ND-1:I=I-1
12590 I=I+1:IF I>ND THEN 12610
12600 (null) TO 12540
12610 GOSUB 7000:REM WRITE THE REVISED FILE
12620 (null) TO 220
13000 REM PRINT FILES ON THE PRINTER
13010 GOSUB 2000:REM SELECT ONE-TIME OR ANNUAL EVENTS
13020 GOSUB 6000:REM READ THE CORRESPONDING FILE
13030 OPEN 4,4
13040 PRINT#4,"LAST ACCESS:";LA$:PRINT#4
13050 IF F2=2 THEN 13070
13060 PRINT#4,TAB(6);"*** ANNUAL EVENTS ***":PRINT#4:(null) TO 13080
13070 PRINT#4,TAB(6);"*** ONE-TIME EVENTS ***":PRINT#4
13080 FOR I=1 TO ND
13090 T1=16-LEN(DT$(I))
13100 PRINT#4,DT$(I)TAB(T1)EV$(I)
13110 NEXT I
13120 PRINT#4,"END OF FILE":PRINT#4:PRINT#4
13130 CLOSE 4
13140 (null) TO 220
14000 REM CALCULATE SORT VALUE (SUBROUTINE, ARGS: DX$,DO)
14010 LE=LEN(DX$):IF LE<6 THEN 14040
14020 YY$=RIGHT$(DX$,2):REM YEAR
14030 DX$=LEFT$(DX$,LE-3):L=LEN(DX$):(null) TO 14050
14040 L=LE
14050 IF L=3 THEN 14100:REM DX$=N/NN
14060 IF L=5 THEN 14110:REM DX$=NN/NN
14070 DY$=RIGHT$(DX$,2)
14080 IF LEFT$(DY$,1)<>"/" THEN 14120:REM DX$=N/NN
14090 (null) TO 14130:REM DX$=NN/N
14100 DD$="0"+RIGHT$(DX$,1):MM$="0"+LEFT$(DX$,1):(null) TO 14140
14110 DD$=RIGHT$(DX$,2):MM$=LEFT$(DX$,2):(null) TO 14140
14120 DD$=RIGHT$(DX$,2):MM$="0"+LEFT$(DX$,1):(null) TO 14140
14130 DD$="0"+RIGHT$(DX$,1):MM$=LEFT$(DX$,2)
14140 IF LE<6 THEN 14160
14150 DS$=YY$+MM$+DD$:(null) TO 14170
14160 DS$=MM$+DD$
14170 DO=VAL(DS$)
14180 RETURN
15000 REM USES GREGORIAN CALENDAR (SUBROUTINE)
15010 DATA JANUARY,FEBRUARY,MARCH,APRIL
15020 DATA MAY,JUNE,JULY,AUGUST,SEPTEMBER
15030 DATA OCTOBER,NOVEMBER,DECEMBER
15040 DATA SATURDAY,SUNDAY,MONDAY,TUESDAY
15050 DATA WEDNESDAY,THURSDAY,FRIDAY
15060 DIM M$(12),W$(6),L$(200)
15070 FOR J=1 TO 12:READ M$(J):NEXT J
15080 FOR J=0 TO 6:READ W$(J):NEXT J
15090 RETURN
16000 REM GET MONTH, DAY AND YEAR FROM D8$ (SUBROUTINE)
16010 M$=LEFT$(D8$,2):M=VAL(M$)
16020 MR$=RIGHT$(M$,1)
16030 IF MR$="/" THEN 16050
16040 D$=MID$(D8$,4,2):(null) TO 16060
16050 D$=MID$(D8$,3,2)
16060 DR$=RIGHT$(D$,1)
16070 IF DR$="/" THEN 16090
16080 D=VAL(D$):(null) TO 16100
16090 D=VAL(LEFT$(D$,1))
16100 Y=VAL(RIGHT$(D8$,2))
16110 GOSUB 17000
16120 PRINT "(";W$(DY);", ";M$(M);D;", ";Y")"
16130 RETURN
17000 REM DETERMINE THE DAY OF THE WEEK (SUBROUTINE)
17010 YR=1900 + Y:Y=YR
17020 C1=365*YR+D+31*M-31
17030 IF M>=3 THEN 17050
17040 YR=YR-1:E=0:GOTO 17060
17050 E=-INT(.4*M+2.3)
17060 PH=INT(YR/4)
17070 PS=INT(.75*(1+INT(YR/100)))
17080 FA=C1+E+PH-PS
17090 DY=FA-7*INT(FA/7)
17100 RETURN
18000 REM DISK ERROR SUBROUTINE
18010 INPUT#15,EN,EM$,ET,ES
18020 IF EN>1 AND EN<>50 THEN PRINT EN,EM$,ET,ES:STOP
18030 RETURN